/**
 * JWT Token 管理工具
 */

const TOKEN_KEY = 'jwt_token'

/**
 * 保存 token 到 localStorage
 * @param {string} token - JWT token
 */
export const setToken = (token) => {
  localStorage.setItem(TOKEN_KEY, token)
}

/**
 * 从 localStorage 获取 token
 * @returns {string|null} JWT token
 */
export const getToken = () => {
  return localStorage.getItem(TOKEN_KEY)
}

/**
 * 移除 token
 */
export const removeToken = () => {
  localStorage.removeItem(TOKEN_KEY)
}

/**
 * 解析JWT token
 * @param {string} token - JWT token
 * @returns {Object|null} 解析后的payload
 */
const parseJWT = (token) => {
  try {
    const base64Url = token.split('.')[1]
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
    const jsonPayload = decodeURIComponent(
      atob(base64)
        .split('')
        .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
        .join('')
    )
    return JSON.parse(jsonPayload)
  } catch (error) {
    console.error('解析JWT失败:', error)
    return null
  }
}

/**
 * 检查token是否过期
 * @param {string} token - JWT token
 * @returns {boolean} true表示已过期
 */
export const isTokenExpired = (token) => {
  if (!token) return true
  
  const payload = parseJWT(token)
  if (!payload || !payload.exp) {
    return true // 无法解析或没有过期时间，视为过期
  }
  
  // exp是秒级时间戳，需要转换为毫秒
  const expirationTime = payload.exp * 1000
  const currentTime = Date.now()
  
  return currentTime >= expirationTime
}

/**
 * 检查是否已登录(token 是否存在且未过期)
 * @returns {boolean}
 */
export const isAuthenticated = () => {
  const token = getToken()
  if (!token) return false
  
  // 检查token是否过期
  if (isTokenExpired(token)) {
    // token已过期，清除它
    removeToken()
    return false
  }
  
  return true
}
